package com.ruoyi.pingjiao.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.ruoyi.pingjiao.domain.Evaluation;
import com.ruoyi.pingjiao.domain.Teacher;
import com.ruoyi.pingjiao.domain.query.AddEvaluationQueryParam;
import com.ruoyi.pingjiao.domain.query.StatisticQueryParam;
import com.ruoyi.pingjiao.domain.vo.EvaluationReportVO;
import org.apache.ibatis.annotations.MapKey;

/**
 * 评教管理Service接口
 *
 * @author 胡浩鹏
 * @date 2022-10-22
 */
public interface IEvaluationService
{
    /**
     * 查询评教管理
     *
     * @param evaluationId 评教管理主键
     * @return 评教管理
     */
    public Evaluation selectEvaluationByEvaluationId(Long evaluationId);

    /**
     * 查询评教管理列表
     *
     * @param evaluation 评教管理
     * @return 评教管理集合
     */
    public List<Evaluation> selectEvaluationList(Evaluation evaluation);

    /**
     * 获取已完成评教数
     *
     * @param evalutionActivityId 评教管理主键
     * @return 评教管理
     */
    public int statsGetComp(Long evalutionActivityId);

    /**
     * 获取应完成评教数
     *
     * @param courseType 评教管理主键
     * @return 评教管理
     */
    public int statsGetShould(String courseType);

    /**
     * 新增评教管理
     *
     * @param evaluation 评教管理
     * @return 结果
     */
    public int insertEvaluation(Evaluation evaluation);

    /**
     * 新增评教管理
     *
     * @param teacher 评教管理
     * @return 结果
     */
    public int insertEvaluations(Teacher teacher);

//    /**
//     * 新增评教管理
//     *
//     * @param queryParam 评教管理
//     * @return 结果
//     */
//    public int insertEvaluationByQuerys(AddEvaluationQueryParam queryParam);

    /**
     * 修改评教管理
     *
     * @param evaluation 评教管理
     * @return 结果
     */
    public int updateEvaluation(Evaluation evaluation);
    public int updateEvaluation(AddEvaluationQueryParam queryParam);

    /**
     * 批量删除评教管理
     *
     * @param evaluationIds 需要删除的评教管理主键集合
     * @return 结果
     */
    public int deleteEvaluationByEvaluationIds(Long[] evaluationIds);

    /**
     * 删除评教管理信息
     *
     * @param evaluationId 评教管理主键
     * @return 结果
     */
    public int deleteEvaluationByEvaluationId(Long evaluationId);

    /**
     * 判断活动的状态
     * @param
     * @return
     */
    public void checkActivityStatus();

    /**
     * 判断学生是否评价老师
     * @param map
     * @return
     */
    public float  getTeacherEvaluatedScore(Map<String,Object> map);

    /**
     * 保存评价的教师最终成绩
     * @return
     */
    public  int saveEvalScoreOfTeacher(Long evaluationActivityId);

    public int add(Long evaluationActivityId,Long paperId,String courseType, String term);

    public List<EvaluationReportVO> getAllEvaluationReport(StatisticQueryParam queryParam);




    /**
     * cjb
     * 评教汇总，最终汇总，查看某教师某个评教活动中试卷各分项得分-（不分课程-不分班）
     */
    public List<Map<String,Object>> getTeacherEvaluationPaperItemScoreReport(Long evaluationActivityId,Long teacherId);

    /**
     * cjb,最终汇总，查看某教师某个评教活动中试卷各分项得分-（分课程班）
     */
    public List<Map<String,Object>> getTeacherCourseClassEvaluationItemScoreReport(Map<String,Object> map);

    /**
     *cjb,最终汇总，查看某教师某个评教活动中试卷各分项得分-（分课程）
     */
    public List<Map<String,Object>> getTeacherCourseEvaluationItemScoreReport(Map<String,Object> map);

    public List<EvaluationReportVO> getDeptScopeTeacherEvaluationReport(Long evaluationActivityId,Long deptId);


    /**
     * cjb,统计全校教师评教各分数段人数
     */
    public List<Map<String,Object>> getGradeWithActivityId(Long evaluation_actitityId);

    /**
     * cjb,按院系统计教师评教各分数段人数
     */
    public List<Map<String,Object>> getGradeWithActivityIdAndDeptName(Map<String,Object> map);

    /**
     * hpf 统计某活动部门的排名
     * @param evaluationActivityId
     * @return
     */
    List<Map<String, Object>> getDeptRank(Long evaluationActivityId);

    public List<Map<String,Object>> countEvaluationProgressByEvaluationActivityIdAndTeacherId(Long evaluation_activityId,Long teacherId);

    public List<Map<String, Object>> countEvaluationProgress(Long evalutionActivityId,Long teacherId);

    public List<Map<String,Object>> countEvaluationProgressFromCourseclass(Long teacherId);

    public  int  deleteCourseclassHistory(Long evaluationActivityId);


    Object getEvaluationIdByEvaluationPaperId(Long evaluationPaperId);
}
